package com.fesine.ssh.dao;

/**
 * Created by Fesine on 2016/2/20.
 */

import java.io.Serializable;
import java.util.List;

/**
 * 创建时间：2015-2-6 下午2:26:42
 *
 * @author andy
 * @version 2.2
 *          <p/>
 *          Dao通用接口
 */

interface BaseDao<T, PK extends Serializable> {
    /**
     * 对于get和load的根本区别，
     * hibernate对于load方法认为该数据在数据库中一定存在，
     * 可以放心的使用代理来延迟加载，如果在使用过程中发现了问题，只能抛异常;
     * 而对于get方法，hibernate一定要获取到真实的数据，否则返回null。
     * @param id
     * @return
     */
    T load(PK id);

    T get(PK id);

    /**
     * 新增数据
     * @param entity
     * @return
     */
    PK save(T entity);

    void update(T entity);

    void saveOrUpdate(T entity);

    /**
     * 删除数据
     * @param id
     */
    void delete(PK id);

    void flush();
    void persist(T entity);

    /**
     * 查询所有数据
     * @return
     */
    List<T> findAll();

    List<T> findAll(int offset, int pageSize);

    List<T> findByEntity(T entity);

    List<T> findByEntity(T entity, int offset, int pageSize);
}
